package module

import (
	"bufio"
	"fmt"
	"os"
	"runtime"
	"strings"
	"time"

	"gitee.com/liumou_site/logger"
)

func (h *Hosts) Menu() {
	// 检查是否为Windows系统并提示权限要求
	if runtime.GOOS == "windows" && strings.Contains(strings.ToLower(h.File), "system32") {
		logger.Warn("在Windows系统上修改系统hosts文件需要管理员权限，请确保以管理员身份运行此程序")
		fmt.Println("按Enter键继续...")
		fmt.Scanln()
	}

	for {
		// 清除屏幕（简单实现）
		fmt.Println(strings.Repeat("\n", 2))

		err := h.Read()
		if err != nil {
			logger.Error("读取hosts文件失败: ", err.Error())
			fmt.Println("按Enter键返回主菜单...")
			fmt.Scanln()
			continue
		}

		reader := bufio.NewReader(os.Stdin)
		logger.Info("当前读取文件路径: ", h.File)
		logger.Info(fmt.Sprintf("当前时间: %s", time.Now().Format("2006-01-02 15:04:05")))
		logger.Info(fmt.Sprintf("记录总数: %d", len(h.RecordList)))

		fmt.Println("\n========== Hosts 管理工具 ==========")
		fmt.Println("请选择需要进行的操作")
		fmt.Println("1. 查看hosts文件")
		fmt.Println("2. 新增条目")
		fmt.Println("3. 删除条目")
		fmt.Println("4. 更新条目")
		fmt.Println("5. 清空条目")
		fmt.Println("6. 优化条目(自动清理不符合格式的条目)")
		fmt.Println("q. 退出")
		fmt.Println("===================================")
		fmt.Print("请输入选择: ")

		n, _ := reader.ReadString('\n')
		n = strings.TrimSpace(n)
		n = strings.ToLower(n)

		switch n {
		case "1":
			h.Show()
			fmt.Println("按Enter键返回主菜单...")
			fmt.Scanln()
		case "2":
			// 新增
			h.Add()
		case "3":
			h.Delete()
		case "4":
			h.Update()
		case "5":
			h.CleanAll()
		case "6":
			h.AutomaticCleaning()
		case "q":
			logger.Info("感谢使用Hosts管理工具，再见！")
			time.Sleep(500 * time.Millisecond)
			os.Exit(0)
			return
		default:
			fmt.Println("输入有误，请输入数字1-6或q")
			time.Sleep(1 * time.Second)
		}
	}
}
